home *** CD-ROM | disk | FTP | other *** search
/ Apple WWDC 1996 / WWDC96_1996 (CD).toast / Technology Materials / MacOS 8 Resources / Developer Tools / Mac OS 8 Interfaces & Libraries / Interfaces / IDLIncludes / HIObjects.idl < prev    next >
Text File  |  1996-05-01  |  13KB  |  376 lines

  1. /*
  2.      File:        HIObjects.idl
  3.  
  4.      Contains:    Interface for the base class of all HI toolbox elements.
  5.  
  6.      Version:    Technology:    System 8.0
  7.                  Release:    Universal Interfaces 3.0d3 on Copland DR1
  8.  
  9.      Copyright:    © 1995-1996 by Apple Computer, Inc.  All rights reserved.
  10.  
  11.      Bugs?:        If you find a problem with this file, send the file and version
  12.                  information (from above) and the problem description to:
  13.  
  14.                      Internet:    apple.bugs@applelink.apple.com
  15.                      AppleLink:    APPLE.BUGS
  16. */
  17.  
  18.  
  19. #ifndef __HIOBJECTS_IDL__
  20. #define __HIOBJECTS_IDL__
  21.  
  22. #include <somobj.idl>
  23. #include <somcls.idl>
  24.  
  25. #include <Types.idl>
  26. #include <Dialogs.idl>
  27. #include <Collections.idl>
  28. #include <Quickdraw.idl>
  29. #include <TextObjects.idl>
  30. #include <AppleEvents.idl>
  31. #include <Events.idl>
  32. #include <Resources.idl>
  33.  
  34. #include <HIImagingObjects.idl>
  35. #include <HIObjectTypes.idl>
  36.  
  37.  
  38. interface HIWindow;
  39.  
  40. /* ########################################################################
  41.  
  42.     HIObject
  43.     
  44.         the base Toolbox object class
  45.         
  46.    ######################################################################## */
  47. interface HIObject : SOMObject
  48. {
  49. // ======================================================
  50. // Attributes
  51. // ======================================================
  52.     HIWindow            GetWindow();
  53.     CGrafPtr            GetPort();
  54.     void                GetRefLabel(out RefLabel identifier);
  55.     Collection            GetCollection();
  56.     
  57.     
  58. // ======================================================
  59. // Public Methods
  60. // ======================================================
  61.     
  62. // * initialization / disposal *
  63.     // programatically initialize the object
  64.     OSStatus Init (in RefLabel identifier, in Rect boundingRect);
  65.     
  66.     // dispose any dynamically allocated fields. 
  67.     void Terminate ();
  68.     
  69.     // for refcount management
  70.     HIObject Clone ();
  71.     void Release ();
  72.     ItemCount GetOwnerCount();
  73.     
  74.     // Initialize the object from the data encapsulated in the given AppleEvent.
  75.     // baseInitializerData contains the data for the entire object
  76.     // initializerDataForClass contains the AESubDesc that points to
  77.     // the data for the current class; and should be bumped down
  78.     // to the subClass's initializer on exit.
  79.     OSStatus InitFromAERecord (in AESubDesc baseInitializerData,
  80.         in AESubDesc initializerDataForClass,
  81.         in HIAERecordDataFormat dataFormat);
  82.  
  83.     // Dump the object's state and initialization data in a format 
  84.     // that can be read by InitFromData.
  85.     OSStatus WriteToAERecord (in AERecord dataForSubclass,
  86.             in AERecord objectData, in HIAERecordDataFormat dataFormat);
  87.     
  88. // * location *
  89.     // Calculate the optimal size of the object - this
  90.     // is the smallest rect that can completely enclose
  91.     // the object's content.
  92.     void CalculateOptimalSize (out SInt16 optimalWidth, out SInt16 optimalHeight);
  93.     
  94.     // Manipulate the bounding rect for the object
  95.     void GetBoundingRect (in HICoordinateSystem coordinate, out Rect boundingRect);
  96.     void SetBoundingRect (in HICoordinateSystem coordinate, in Rect newBoundingRect);
  97.     
  98.     // other ways to change the bounding rect.  Note that
  99.     // SetPosition can be optimized since there is no resizing involved.
  100.     void SetPosition (in HICoordinateSystem coordinate, in Point newPosition); 
  101.     void SetSize (in SInt16 width, in SInt16 height);
  102.     
  103.     // Get the rect in which an object draws itself.  This
  104.     // may be bigger than the bounding rect, as it includes
  105.     // keyboard focus ring, default ring, etc.
  106.     void GetUpdateRect (in HICoordinateSystem coordinate, out Rect updateRect);
  107.     
  108. // * Enabling *
  109.     // If enabled, an object should accept clicks.
  110.     void Enable();
  111.     void Disable();
  112.     boolean IsEnabled ();
  113.     
  114. // * Visibility *    
  115.     void Show();
  116.     void Hide();
  117.     boolean IsVisible ();
  118.  
  119. // * Event Handling *
  120.  
  121.     // All event handling methods return the following OSStatus values:
  122.     //        noErr: event handled by the object.  Don't pass through.
  123.     //        errAEEventNotHandled: event not handled by object.  Pass through
  124.     //            to other interested objects, and eventually back to event handler.
  125.     //        (other error value): some kind of failure handling the event.
  126.     OSStatus HandleAppleEvent (in AEEventClass eventClass, in AEEventID eventID,
  127.             in AppleEvent theEvent, in AppleEvent reply, in AEHandlerTableRef handlerTableRef);
  128.     
  129.     OSStatus HandleActivate (in AppleEvent theEvent, in AppleEvent reply, in AEHandlerTableRef handlerTableRef);
  130.     OSStatus HandleDeactivate (in AppleEvent theEvent, in AppleEvent reply, in AEHandlerTableRef handlerTableRef);
  131.  
  132.     // handle a navigational key event
  133.     OSStatus HandleNavigation (in SInt8 key, in SInt8 keyCode,             /* *** shouldn't be key based. What is real namespace of params?  */
  134.         in EventModifiers modifiers, in AppleEvent theEvent, in AppleEvent reply, in AEHandlerTableRef handlerTableRef);
  135.  
  136.  
  137.     // react to a click in the object's bounding area.  
  138.     // See event handling note above for info on return values
  139.     OSStatus HandleMouseDownInContent (in Point portLocalWhere, in EventModifiers modifiers, 
  140.         in AppleEvent theEvent, in AppleEvent reply, in AEHandlerTableRef handlerTableRef);
  141.     
  142.     // mouse has moved.  return true if the object still wants
  143.     // to be informed when the mouse has moved or been released.
  144.     OSStatus HandleMouseMovedInContent (in Point portLocalWhere, in EventModifiers modifiers, 
  145.         in AppleEvent theEvent, in AppleEvent reply, in AEHandlerTableRef handlerTableRef);
  146.  
  147.     // mouse has stopped moving
  148.     OSStatus HandleMouseStoppedMovingInContent (in Point portLocalWhere, in EventModifiers modifiers, 
  149.         in AppleEvent theEvent, in AppleEvent reply, in AEHandlerTableRef handlerTableRef);
  150.     
  151.     // mouse button has been released since it has been clicked inside the object.
  152.     // return true if the object accepted the click.
  153.     OSStatus HandleMouseUpInContent (in Point portLocalWhere, in EventModifiers modifiers, 
  154.         in AppleEvent theEvent, in AppleEvent reply, in AEHandlerTableRef handlerTableRef);
  155.  
  156. // * UserInputFocus *      
  157.     // give (or take away) focus to the object.
  158.     // it is the client's responsibility to keep track
  159.     // of which object has focus.
  160.     void TakeUserInputFocus();        
  161.     void ReleaseUserInputFocus();
  162.     boolean HasUserInputFocus();
  163.  
  164.     // query for user input focus.  Return true if the 
  165.     // object is in a state where it can give up 
  166.     // user input focus.
  167.     boolean CanReleaseUserInputFocus ();
  168.     
  169.     // manipulate flags affecting an object's ability to accept focus. 
  170.     void SetUserInputFocusFlags(in HIUserInputFocusFlags flags);        
  171.     HIUserInputFocusFlags GetUserInputFocusFlags();
  172.     
  173. // * Title *    
  174.     // the title is an imaging object (usually a piece of text, but
  175.     // it could be something else like a picture or icon).  By
  176.     // default, a panel has no title.
  177.     OSStatus SetTitle(in ConstHIImageRef title, in HIAdoptionFlags disposalAdoptionFlags);
  178.     OSStatus GetTitle(out HIImageRef title);    
  179.  
  180.     
  181. // * Imaging *    
  182.  
  183.     // while an object must live in a window, it can be drawn in any
  184.     // port, to simplify printing.  If whichPort is set to NULL,
  185.     // than we assume we're drawing in our window.
  186.     // if drawRgn is NULL, then draw the entire object; otherwise, attempt
  187.     // to draw only the content that lies in the region.
  188.     
  189.     // This method should NOT be overridden - to change how your
  190.     // object appears, override DrawContent.
  191.     void Draw (in CGrafPtr whichPort, in RgnHandle drawRgn);
  192.     
  193.     // This method should NOT be overridden - to change how your
  194.     // object erases, override EraseContent.
  195.  
  196.     void Erase (in CGrafPtr whichPort, in RgnHandle eraseRgn);
  197.     
  198.     // Force a redraw of the object.  Based on the value of 
  199.     // the object's fDrawingMode, the redraw will happen
  200.     // either (i) immediately, (ii) next update event, or
  201.     // (iii) some time later when the mode is changed to
  202.     // one of the first two values.
  203.     void Invalidate ();
  204.     
  205.     // set the object's drawing mode - the default behavior
  206.     // is for the object to draw next update event
  207.     HIDrawingMode GetDrawingMode ();
  208.     void SetDrawingMode (in HIDrawingMode drawingMode);
  209.  
  210.     void SetBackgroundPattern (in PixPatHandle backgroundPattern);
  211.     PixPatHandle GetBackgroundPattern();
  212.     
  213.     
  214. // * Clipboard *
  215.     // fClipboardSupportFlags indicates when it makes sense for 
  216.     // an object to use cut, copy, paste, clear or undo
  217.     // functionality.  They can be changed at any time
  218.     // during the object's lifetime.
  219.     void Cut ();
  220.     void Copy ();
  221.     void Paste ();
  222.     void Clear ();
  223.     HIClipboardSupportFlags    GetClipboardSupportFlags();
  224.  
  225. // * State Change
  226.     OSStatus            AddStateChangeCallback (in HIStateChangeCallbackProcPtr changedStateCallback, out HIStateChangeCallbackRef newCallbackRef);
  227.     OSStatus            RemoveStateChangeCallback (in HIStateChangeCallbackRef callbackRefToRemove);
  228.  
  229. // ======================================================
  230. // Procedural calls
  231. //     These are not object methods, but rather static functions
  232. // ======================================================
  233.  
  234.  
  235. // Returns all Panels in the current process with a matching RefLabel
  236.     OSStatus        GetHIObjectFromRefLabel(in RefLabel identifier, in ItemCount requestedObjects, 
  237.                                                 out ItemCount totalObjects, inout HIObject theObjects);
  238.  
  239. // create and initialize an HI Object
  240. // whose data is encapsulated in the given AESubdesc or resource
  241.     OSStatus         GetNewHIObject (in AESubDesc objectInitializer, out HIObject newObject);
  242.     OSStatus         GetNewHIObjectFromResource (in ResID objectInitializerResourceID, out HIObject newObject);
  243.  
  244. // ======================================================
  245. // Protected Methods
  246. //     Call these methods only from within object implementation!
  247. // ======================================================
  248.     // actually draw yourself
  249.     void DrawContent (in CGrafPtr whichPort, in RgnHandle drawRgn);
  250.  
  251.     // erase the object.  by default, this will erase the entire
  252.     // bounding rect.  Override if your shape is unusual and 
  253.     // you want to erase only the area where you typically draw
  254.     void EraseContent (in CGrafPtr whichPort, in RgnHandle regionToErase);
  255.     
  256.     // transfer the given point from Port coordinates
  257.     // to coordinates local to this object's location,
  258.     // or vice versa.
  259.     void TranslatePoint (in HICoordinateSystem translateFrom,
  260.                          in HICoordinateSystem translateTo,
  261.                          in Point sourcePoint, 
  262.                          out Point translatedPoint);
  263.  
  264.     // similar to TranslatePoint, but translates a rectangle
  265.     void TranslateRect  (in HICoordinateSystem translateFrom,
  266.                          in HICoordinateSystem translateTo,
  267.                          in Rect sourceRect, 
  268.                          out Rect translatedRect);
  269.  
  270.     // State has changed.  Call this utility method 
  271.     // to call through to the list of state changed procs, if any 
  272.     void StateChanged (in HIStateChangeCodeCreator selectorCreator, in HIStateChangeCode changedCode);
  273.     
  274.     void SetClipboardSupportFlags(in HIClipboardSupportFlags flags);
  275.     
  276.     // Verify the object's internal state, for qualification
  277.     // should be overridden by subclasses to verify
  278.     // their own fields, too.  In optimized builds, this should
  279.     // do nothing and return noErr.
  280.     OSStatus Verify ();
  281.     
  282.     implementation {
  283.         
  284.         passthru C_h =     "#include <Types.h>"
  285.                         "#include <Quickdraw.h>"
  286.                         "#include <TextObjects.h>"
  287.                         "#include <Drag.h>"
  288.                         "#include <Collections.h>"
  289.                         "#include <HIImagingObjects.h>"
  290.                         "#include <HIObjectTypes.h>";
  291.  
  292.         passthru C_xh = "#include <Types.h>"
  293.                         "#include <Quickdraw.h>"
  294.                         "#include <TextObjects.h>"
  295.                         "#include <Drag.h>"
  296.                         "#include <Collections.h>"
  297.                         "#include <HIImagingObjects.xh>"
  298.                         "#include <HIObjectTypes.h>";
  299.  
  300.         GetHIObjectFromRefLabel:    procedure, noself;
  301.         GetNewHIObject:                procedure, noself;
  302.         GetNewHIObjectFromResource:    procedure, noself;
  303.         
  304.         Clone:                        nooverride;
  305.         Release:                    nooverride;
  306.         GetOwnercount:                nooverride;
  307.         
  308.         releaseorder:    GetWindow,
  309.                         GetPort,
  310.                         GetRefLabel,
  311.                         GetCollection,
  312.                         AddStateChangeCallback,
  313.                         RemoveStateChangeCallback,
  314.                         SetBackgroundPattern,
  315.                         GetBackgroundPattern,
  316.                         Init,
  317.                         Terminate,
  318.                         InitFromAERecord,
  319.                         WriteToAERecord,
  320.                         CalculateOptimalSize,
  321.                         GetBoundingRect,
  322.                         SetBoundingRect,
  323.                         SetPosition,
  324.                         SetSize,
  325.                         GetUpdateRect,
  326.                         Enable,
  327.                         Disable,
  328.                         IsEnabled,
  329.                         Show,
  330.                         Hide,
  331.                         IsVisible,
  332.                         HandleAppleEvent,
  333.                         HandleActivate,
  334.                         HandleDeactivate,
  335.                         HandleNavigation,
  336.                         HandleMouseDownInContent,
  337.                         HandleMouseUpInContent,
  338.                         HandleMouseMovedInContent,
  339.                         HandleMouseStoppedMovingInContent,
  340.                         TakeUserInputFocus,
  341.                         ReleaseUserInputFocus,
  342.                         HasUserInputFocus,
  343.                         CanReleaseUserInputFocus,
  344.                         SetUserInputFocusFlags,
  345.                         GetUserInputFocusFlags,
  346.                         SetTitle,
  347.                         GetTitle,
  348.                         Draw,
  349.                         Erase,
  350.                         Invalidate,
  351.                         GetDrawingMode,
  352.                         SetDrawingMode,
  353.                         Cut,
  354.                         Copy,
  355.                         Paste,
  356.                         Clear,
  357.                         SetClipboardSupportFlags,
  358.                         GetClipboardSupportFlags,
  359.                         DrawContent,
  360.                         EraseContent,
  361.                         TranslatePoint,
  362.                         TranslateRect,
  363.                         StateChanged,
  364.                         Verify,
  365.                         GetHIObjectFromRefLabel,
  366.                         GetNewHIObject,
  367.                         GetNewHIObjectFromResource,
  368.                         Clone,
  369.                         Release,
  370.                         GetOwnerCount;
  371.                         
  372.     };
  373. };
  374.  
  375. #endif
  376.